import { mergeRecursive } from '@/utils/ruoyi';
import dictConverter from './DictConverter';

export const options = {
	metas: {
		'*': {
			/**
			 * 字典请求，方法签名为function(dictMeta: DictMeta): Promise
			 */
			request: (dictMeta) => {
				console.log(`load dict ${dictMeta.type}`);
				return Promise.resolve([]);
			},
			/**
			 * 字典响应数据转换器，方法签名为function(response: Object, dictMeta: DictMeta): DictData
			 */
			responseConverter,
			labelField: 'label',
			valueField: 'value',
		},
	},
	/**
	 * 默认标签字段
	 */
	DEFAULT_LABEL_FIELDS: ['label', 'name', 'title'],
	/**
	 * 默认值字段
	 */
	DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'],
};

/**
 * 映射字典
 * @param {Object} response 字典数据
 * @param {DictMeta} dictMeta 字典元数据
 * @returns {DictData}
 */
function responseConverter(response, dictMeta) {
	const dicts = response.content instanceof Array ? response.content : response;
	if (dicts === undefined) {
		console.warn(`no dict data of "${dictMeta.type}" found in the response`);
		return [];
	}
	return dicts.map((d) => dictConverter(d, dictMeta));
}

export function mergeOptions(src) {
	mergeRecursive(options, src);
}

export default options;
